package controllers

import (
	"gameTest/common"
	"gameTest/datamodels"
	"gameTest/services"
	"github.com/kataras/iris"
	"github.com/kataras/iris/mvc"
	"strconv"
	"time"
)

type ProductController struct {
	Ctx iris.Context
	ProductService services.IProductService
}

//查找全部 头部是Any表示支持所有请求方式get post put等
func (p *ProductController) GetAll() mvc.View  {
	productArray, _ := p.ProductService.GetAllProduct()
	return mvc.View{
		Name: "product/view.html",
		Data: iris.Map{
			"productArray": productArray,
		},
	}
}


//TODO 分页查找

//修改产品
func (p *ProductController) PostUpdate() {
	product := &datamodels.Product{}
	p.Ctx.Request().ParseForm()
	dec := common.NewDecoder(&common.DecoderOptions{TagName:"productForm"})
	if err := dec.Decode(p.Ctx.Request().Form, product); err != nil {
		p.Ctx.Application().Logger().Debug(err)
	}
	product.UpdateAt = time.Now().Format("2006-01-02 15:04:05")
	err := p.ProductService.UpdateProduct(product)
	if err != nil {
		p.Ctx.Application().Logger().Debug(err)
	}
	p.Ctx.Redirect("/product/all")
}

//添加页面
func (p *ProductController) GetAdd() mvc.View {
	return mvc.View{
		Name: "product/add.html",
	}
}


//添加操作
func (p *ProductController) PostAdd() {
	product := &datamodels.Product{}
	p.Ctx.Request().ParseForm()
	dec := common.NewDecoder(&common.DecoderOptions{TagName:"productForm"})
	if err := dec.Decode(p.Ctx.Request().Form, product); err != nil {
		p.Ctx.Application().Logger().Debug(err)
	}
	product.CreateAt = time.Now().Format("2006-01-02 15:04:05")
	product.UpdateAt = product.CreateAt
	_, err := p.ProductService.InsertProduct(product)
	if err != nil {
		p.Ctx.Application().Logger().Debug(err)
	}
	p.Ctx.Redirect("/product/all")
}

//获取一条详情
func (p *ProductController) GetManager() mvc.View {
	idString := p.Ctx.URLParam("id")
	id, err := strconv.ParseInt(idString, 10, 16)
	if err != nil {
		p.Ctx.Application().Logger().Debug(err)
	}
	product, err := p.ProductService.GetProductById(id)
	if err != nil {
		p.Ctx.Application().Logger().Debug(err)
	}
	return mvc.View{
		Name: "product/manager.html",
		Data: iris.Map{
			"product": product,
		},
	}
}

//删除一条数据
func (p *ProductController) GetDelete() {
	idString := p.Ctx.URLParam("id")
	id, err := strconv.ParseInt(idString, 10, 16)
	if err != nil {
		p.Ctx.Application().Logger().Debug(err)
	}
	isOk := p.ProductService.DeleteProductById(id)
	if isOk {
		p.Ctx.Application().Logger().Debug("删除成功,id:" + idString)
	} else {
		p.Ctx.Application().Logger().Debug("删除失败,id:" + idString)
	}
	p.Ctx.Redirect("/product/all")
}



